package br.com.gkarian.mydesk.services.financeiro;

import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import br.com.caelum.vraptor.ioc.Component;
import br.com.gkarian.mydesk.dao.financeiro.interfaces.BancoDAO;
import br.com.gkarian.mydesk.model.financeiro.Banco;
import br.com.gkarian.mydesk.services.financeiro.interfaces.BancoService;

@Component
@Transactional(propagation = Propagation.REQUIRED, readOnly = false)
public class BancoServiceImpl implements BancoService {

	private static final Logger LOG = Logger.getLogger(BancoServiceImpl.class);
	
	private BancoDAO bancoDao;
	
	public BancoServiceImpl(BancoDAO bancoDao) {
		this.bancoDao = bancoDao;
	}
	
	@Override
	public Banco cadastrarBanco(Banco banco) throws Exception {
		LOG.info("Cadastrando banco = " + banco);
		banco = bancoDao.salvar(banco);
		LOG.info("Banco de ID [" + banco.getId() + "] cadastrado com sucesso");
		return banco;
	}

	@Override
	public Banco carregarBanco(Integer id) throws Exception {
		LOG.info("Recuperando banco de ID [" + id + "]");
		Banco banco = bancoDao.carregar(id);
		LOG.info("Banco de ID [" + banco.getId() + "] recuperado");
		return banco;
	}

	@Override
	public void removerBanco(Banco banco) throws Exception {
		LOG.info("Banco de ID [" + banco.getId() + "] será removido");
		bancoDao.remover(banco);
		LOG.info("Banco de ID [" + banco.getId() + "] removido com sucesso");
	}

	@Override
	public void atualizarBanco(Banco banco) throws Exception {
		LOG.info("Banco de ID [" + banco.getId() + "] será atualizado");
		bancoDao.atualizar(banco);
		LOG.info("Banco de ID [" + banco.getId() + "] atualizado com sucesso");
	}

	@Override
	public List<Banco> listarBancos() throws Exception {
		LOG.info("Listando bancos");
		List<Banco> listBancos = bancoDao.listarTudo();
		LOG.info("Foram recuperadas " + listBancos.size() + " bancos");
		return listBancos;
	}
}
